(function($, window, document){
	$.extend($.fn, {
		module : {
			module: null,
			dialog: null,
			options: null,
			updateOptions: null,
			name: null,
			
			create : function(options){
				this.options = jQuery.extend({
					title: "Module Sample",
					show: "fade",
					hide: "fade",
					width: 400,
					height: 300,
					name: "Name",
					close : function(event, ui) {
						_div = $(this);
						_div.dialog('destroy').remove();
					}
				}, options);
				
				this.name = this.options.name;
				return this;
			},
			
			close: function(){
				this.dialog.dialog("close");
			},
			
			open : function(id){			
				this.module = ((id == null ) ? $("<div/>") : $("<div/>", {id: id})).appendTo("#content");
				this.dialog = $(this.module).dialog(this.options);
				this.update(id);
				return this;
			},
			
			live : function(params){
				this.updateOptions = jQuery.extend({
					source: "",
					name: this.name,
					callback: null,
				}, params);
				
				return this;
			},
			
			update: function(id){
				var updater = new Updater(id, this.module, this.updateOptions);
				updater.update(true);
			}
		}
	});
})(jQuery, window, document);


function Updater(id, container, params){
	this.id = id;
	this.container = container;
	this.number = 1;
	this.lastId = null;
	this.canUpdate = true;
	this.options = jQuery.extend({
		source: "",
		name: "Update",
		callback: null
	}, params);
	this.contentName = this.options.name;
}

Updater.prototype.createItem = function(result){
	var _container = $("<div />", {id: result.sender.id, class: "item"});
	
	if(this.lastId == null){ 
		_container.appendTo(this.container); 
	}
	else{ 
		$("#"+this.lastId).before(_container); 
	}
	
	_container.load(this.options.source, function(){
		var live = $.data(_container, "updater");
		if(live.options.callback != null){
			live.options.callback.call(this, result);
		}
	});
	
	$.data(_container, "updater", this);
	return _container;
};

Updater.prototype.update = function(firstTime){
	if (!firstTime && $("#"+this.id).length == 0) {
		return;
	}
	
	var _result = this.call();
	var _div = this.createItem(_result);	
	
	_div.fadeIn('slow', function(){		
		_div.queue(function(){
			setTimeout(function(){
				_div.dequeue();
				var updater = $.data(_div, "updater");
				
				updater.update(false);
			}, 5000);
		});		
	});
	
	//_div.fadeIn('slow');	
	this.lastId = _result.sender.id;
};

Updater.prototype.call = function(){
	//envia a requisicao ajax
	var identification = this.contentName + this.number++;
	
	if(this.contentName === "testimony"){
		return {sender: {	name: "Amanda Carolina Cunha",
							id: identification,
							picture: "images/amanda.jpg" },
				content: "Minha vida se tornou muito melhor quando passei a dar mais atenção aos meus cachorros, gatos, peixinhos dourados, coelhos, porcos da índia, papagaio, jaboti e cágado..." };
	}
	
	if(this.contentName === "news"){
		return {	sender: {	name: "Matheus Gazenbeinas Esteves",
								id: identification,
								picture: "images/matheus.jpg" },
					title: "Notícia da hora...",
					content: "Em breve ocorrerá o lançamento oficial da rede social Dotcão. <br /> Esta rede social está destinada a oferecer um canal de comunicação bilateral entre doadores e receptores interessados em adoção de animais." };
		
	}
	
	if(this.contentName === ""){
		
	}
	
	
};
